home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / gfx-0_17.lha / graphics-0.17 / include / libplot.h next >
C/C++ Source or Header  |  1991-03-11  |  8KB  |  216 lines

  1. /* plot, a library of functions for tektronics 4010 compatible devices.
  2.    Copyright (C) 1989 Free Software Foundation, Inc.
  3.  
  4. libtek is distributed in the hope that it will be useful, but WITHOUT ANY
  5. WARRANTY.  No author or distributor accepts responsibility to anyone for the
  6. consequences of using it or for whether it serves any particular purpose or
  7. works at all, unless he says so in writing.  Refer to the GNU General Public
  8. License for full details.
  9.  
  10. Everyone is granted permission to copy, modify and redistribute libtek, but
  11. only under the conditions described in the GNU General Public License.  A copy
  12. of this license is supposed to have been given to you along with libtek so
  13. you can know your rights and responsibilities.  It should be in a file named
  14. COPYING.  Among other things, the copyright notice and this notice must be
  15. preserved on all copies.  */
  16.  
  17. #ifndef _libplot_defines_
  18. #define _libplot_defines_ 1
  19.  
  20. /* This elides the argument prototypes if the compiler does not
  21.    supprort them. The name protarg is chosen in hopes that it will not
  22.    collide with any others. */
  23. #ifdef __STDC__
  24. #define P__(a)    a
  25. #else
  26. #define P__(a)    ()
  27. #endif
  28.  
  29. /* the standard library of plot functions */
  30. extern int arc P__ ((int xc, int yc, int x0, int y0, int x1, int y1));
  31. extern int box P__ ((int x0, int y0, int x1, int y1));
  32. extern int circle P__ ((int x, int y, int r));
  33. extern int closepl P__ ((void));
  34. extern int cont P__ ((int x, int y));
  35. extern int erase P__ ((void));
  36. extern int label P__ ((char *s));
  37. extern int line P__ ((int x0, int y0, int x1, int y1));
  38. extern int linemod P__ ((char *s));
  39. extern int move P__ ((int x, int y));
  40. extern int openpl P__ ((void));
  41. extern int point P__ ((int x, int y));
  42. extern int space P__ ((int x0, int y0, int x1, int y1));
  43.  
  44. /* Extensions to the library for postscript */
  45. extern int alabel P__ ((int x_justify, int y_justify, char *s));
  46. extern int color P__ ((int red, int green, int blue));
  47. extern int dot P__ ((int x, int y, int dx, int n, char *pattern));
  48. extern int fill P__ ((int level));
  49. extern int fontname P__ ((char *s));
  50. extern int fontsize P__ ((int size));
  51. extern void putshort P__ ((int x));
  52. extern int rotate P__ ((int x, int y, int angle));
  53.  
  54. /* Internal routines: */
  55. extern int find_font P__ ((char *s));
  56. extern int string_width P__ ((char *s));
  57. extern int draw_line P__ ((void));
  58. extern void find_byte_order P__ ((int *x0, int *y0, int *x1, int *y1));
  59. extern int coord P__ ((FILE *input));
  60. extern void read_string P__ ((FILE *input, char *buffer, int buffer_length));
  61. extern void read_plot P__ ((FILE *in_stream, char *buffer, int buffer_length));
  62. extern int swap_bytes P__ ((int x));
  63. extern void set_range P__ ((double x, double y));
  64. extern void get_range P__ ((double *xmin, double *xmax, double *ymin, double *ymax));
  65. #undef P__
  66.  
  67. /* Global variables which affect the output: */
  68. extern double x_input_min; /* minimum input x coordinate */
  69. extern double y_input_min; /* minimum input y coordinate */
  70. extern double x_output_min; /* minimum output x coordinate */
  71. extern double y_output_min; /* minimum output y coordinate */
  72. extern double x_output_max; /* maximum output x coordinate */
  73. extern double y_output_max; /* maximum output y coordinate */
  74. extern double scaleup; /* input to output scaleing for both x and y */
  75.  
  76. extern int last_x, last_y; /* location of the last coordinates used */
  77.  
  78. /* This is the default scaling in the postscript current transformation
  79.    matrix (CTM) for the entire plot. This value is arbitrarily chosen
  80.    for compatibility with idraw. See open.c. */
  81. #define SCALING 0.8
  82.  
  83. /* The scaling and rotation part of a postscript transformation matrix */
  84. extern double text_transformation_matrix[4];
  85.  
  86. /* Note: define MAX_NO_OF_POINTS according to the number of
  87.    points the postscript device can handle.  Experimentation has
  88.    shown 150 to be reasonable. */
  89.  
  90. #define MAX_NO_OF_POINTS 150
  91. extern int line_x[MAX_NO_OF_POINTS];
  92. extern int line_y[MAX_NO_OF_POINTS];
  93.  
  94. /* We accumulate coordinates untill we either have enought points
  95.    or the line is broken.  This counter tells us whether we have
  96.    accumulated points and how many there are. */
  97.  
  98. extern int PointsInLine;
  99.  
  100. /* This bit vector represents the line style (eg. dashed) for
  101.    idraw. We intitialize it to all ones which represents a solid
  102.    line. */
  103.  
  104. extern long line_type_bit_vector;
  105.  
  106. /* This is a string that should conatain a postscript vector
  107.    argument for the postscript setdash command.  This is allocted
  108.    in the OPENPL function. */
  109.  
  110. extern char *line_type_setdash;
  111.  
  112. /* The current length of the above buffer */
  113.  
  114. extern int line_type_setdash_length;
  115.  
  116. /* LINE_TYPE_SETDASH_BITS is one greater than the length in number of bits in
  117.    the dash pattern.  It can be computed as the sum of the integers contained
  118.    in LINE_TYPE_SETDASH plus one.  If the string is empty, then the value should
  119.    be zero. */
  120.  
  121. extern int line_type_setdash_bits;
  122.  
  123. /* Idraw puts the upper left corner of the tex at the current */
  124.  
  125. /* TEXT_ROTATION is the angle in degress counterclockwise from the
  126.    horizontal for rotation of labels. */
  127.  
  128. extern int text_rotation;
  129.  
  130. /* FONT_SIZE is the font size in printer's points (-f option). */
  131.  
  132. extern double font_size;
  133.  
  134. /* FONT_SCALING takes into account the font scaling by idraw.  Version 2.4
  135.    of idraw scales the whole drawing down by a factor of SCALING, we must
  136.    scale the fonts back up by 1.25 so that a 14 point fonts appears as
  137.    a 14 point font on the hardcopy. Version 2.5 of idraw does not seem
  138.    to need this adjustment, but it is left here for compatibility. */
  139.  
  140. extern double font_scaling;
  141.  
  142. /* USER_HAS_PROLOGUE is a flag. If it is non-zero then the OPENPL routine
  143.    should output the user specified prologue contained in the file specified
  144.    in the string USERS_PROLOGUE */
  145.  
  146. extern int user_has_prologue;
  147.  
  148. /* USERS_PROLOGUE is a string containing the file name for any user specified
  149.    postscript prologue.  This file is a substitute for the prologue contained
  150.    in the file header.c. */
  151.  
  152. char *users_prologue;
  153.  
  154.  
  155. struct font_info_struct {
  156.   char *name;            /* the name the user specifies the font by */
  157.   char *X_name;            /* the X windows font name */
  158.   char *ps_name;        /* the postscript font name */
  159.   int width[256];        /* the font width information */
  160. };
  161.  
  162. #define NO_OF_FONTS 13
  163.  
  164. extern struct font_info_struct font_info[NO_OF_FONTS];
  165.  
  166.  
  167. /* CURRENT_FONT is a string containing the name of the current font. */
  168.  
  169. extern char* current_font;
  170.  
  171. /* DEFAULT_FONT is a string containing the name of the default font.
  172.    This string should be a valid match for one of the font names. */
  173.  
  174. extern char* default_font;
  175.  
  176. /* FIND_FONT takes a string argument S containing a font name and returns the
  177.    index of the font structure FONT_INFO corresponding to that name. If no match
  178.    is found for the font name, an error message is printed and the index of the
  179.    default font is returned. */
  180.  
  181. extern int find_font();
  182.  
  183.  
  184. /* FGCOLOR_RED, FGCOLOR_GREEN and FGCOLOR_BLUE indicate the foreground
  185.    color of all plot. For each the range of intensity is from 0 to 1 so
  186.    that a value of (0,0,0) represents black and a value of (1,1,1)
  187.    indicates white. */
  188.  
  189. extern double fgcolor_red, fgcolor_green, fgcolor_blue;
  190.  
  191. /* FILL_LEVEL is the intensity of the filler for closed paths.  Intensity
  192.    ranges from 0 to 1. A value of 0 represents black and a value of 1 indicates
  193.    white. */
  194.  
  195. extern double fill_level;
  196.  
  197. /* OUTPUT_HIGH_BYTE_FIRST specifies the byte order for two byte integers
  198.    written to the output.
  199.  
  200.    A value of 1 specifies that they will be written high byte first.
  201.    A value of -1 specifies that they will be written low byte first.
  202.    A zero value specifies that the host (default) byte order is used. */
  203.  
  204. extern int output_high_byte_first;
  205.  
  206. /* LINE_WIDTH is the interger value of width of lines drawn. */
  207.  
  208. extern int line_width;
  209.  
  210. /* some machines do not define M_PI. */
  211. #ifndef M_PI
  212. #define M_PI 3.14159265358979323846264
  213. #endif
  214.  
  215. #endif /* _libplot_defines_ */
  216.